from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import json





url='https://www.taobao.com/'

#   指定edge浏览器的驱动
service = Service(r"D:\py_pycharm\pythonProject\CompetitionData\msedgedriver.exe")
#   初始化edge浏览器的设置
options = Options()
#   创建浏览器驱动
driver=webdriver.Edge(service=service,options=options)

driver.get(url)
#   最大化
driver.maximize_window()
time.sleep(2)
#   定位到立即登录按钮
login_button=driver.find_element(By.XPATH,'//*[@id="ice-container"]/div[2]/div[2]/div[2]/div[3]/div/div[1]/div[2]/div[1]/a')
#   点击立即登录
login_button.click()

#   将驱动控制的页面放到最后一个，这样才可以操作登陆页面的东西，否则会找不到短信登录的按钮
driver.switch_to.window(driver.window_handles[-1])
time.sleep(5)

#   定位到短信登录的按钮
message_login_button=driver.find_element(By.XPATH,'/html/body/div/div[2]/div[3]/div/div/div/div[1]/div/div/a[2]')
#   点击短信登录
message_login_button.click()

"""
5. 总结
driver.execute_cdp_cmd：通过 CDP 向浏览器发送命令，执行低层次的操作。
'Page.addScriptToEvaluateOnNewDocument'：在每个新加载的页面上注入并执行指定的 JavaScript 代码。
delete navigator.__proto__.webdriver：删除 navigator 对象原型链中的 webdriver 属性，使浏览器看起来不是由自动化工具
控制的。
通过这一方法，开发者能够绕过某些反自动化机制，确保 Selenium 脚本能够更加顺利地执行，尤其是在那些对 navigator.webdriver 属
性敏感的网站上。
"""
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': 'delete navigator.__proto__.webdriver',
})



#   定位到输入手机号码的按钮
input_phone_number_button=driver.find_element(By.XPATH,'//*[@id="fm-sms-login-id"]')
#   在输入框输入我的手机号码
input_phone_number_button.send_keys("18172411867")
#   点击获取验证码
driver.find_element(By.XPATH,'//*[@id="login-form"]/div[2]/div[3]/a').click()
#   时间停留两分钟用来填写验证码
time.sleep(50)

#   定位到登录按钮并且点击
driver.find_element(By.XPATH,'//*[@id="login-form"]/div[8]/button').click()

time.sleep(10)

#   登陆完之后跳转了页面，将驱动的位置也要改过去，否则驱动操控的还是登录页面
driver.switch_to.window(driver.window_handles[-1])

#   获取登录之后的cookies信息
cookies=driver.get_cookies()

#   检查cookies的数据
for x in cookies:
    print(type(x))
    print(x)


#   将cookies以json的格式存入文件
for x in cookies:
    with open('cookies.json','a') as file:
        json.dump(x,file)
        file.write('\n')

time.sleep(3)

#   为了防止自动关闭网页,设置如下代码，需要自己手动在控制台回车才会执行下面的代码
input("请在控制台回车执行下面的代码")
driver.quit()
